jquery text()。replace(”,”)无效

嗨,我现在正在尝试几个小时,以便在我添加后再次删除文本字符串。

我有一个处理手风琴的脚本,我的文本中有一些冗余。 所以我想在打开或关闭手风琴行时添加和删除冗余文本。

这是我的代码:

var redundantText = "text text text Contact Me text text text"; $('#collapse_1').on('show.bs.collapse', function() { $(".dropdown_collapse_1").addClass("dropdown-indicator"); $(".dropdown_collapse_1").removeClass("dropdown-collapsed"); $("#redundant_text_wrapper").append(redundantText); }); $('#collapse_1').on('hide.bs.collapse', function() { $(".dropdown_collapse_1").addClass("dropdown-collapsed"); $(".dropdown_collapse_1").removeClass("dropdown-indicator"); $("#redundant_text_wrapper").text().replace(redundantText, ''); }); 

附加工作正常,但text()。replace()没有。 因此,如果我多次打开和关闭手风琴行,它总是附加redundantText但从不删除它,以便使redundantText变得更加冗余。

编辑:将’redundantText’更改为redundantText。 仍然无法正常工作

EDIT2:

 $("#redundant_text_wrapper").text($("#redundant_text_wrapper").text().replace(redundantText,'')); 

也没有帮助,它只删除链接但文本保留

EDIT3:

 $( "#redundant_text_wrapper").text(function(index, currentText) { return currentText.replace(redundantText,''); }); 

也只删除链接,文本保留

那应该是:

 $( "#redundant_text_wrapper").text( $( "#redundant_text_wrapper").text().replace('redundantText','') ) ; 

或者,如果要替换所有出现的内容:

 $( "#redundant_text_wrapper").text( $( "#redundant_text_wrapper").text().replace(/redundantText/g,'') ) ; 

$( "#redundant_text_wrapper").text().replace('redundantText','')只获取文本值,替换它并对结果不做任何操作,因此这条线具有讽刺意味。

另外,由于您的redundantText包含html,您可能应该使用html()而不是text()

如果你想操作一个元素的现有html,你应该使用带有一个函数的html()的重载html() 对于text()也有相同的重载)。 这将接收元素的当前HTML并返回要设置的新HTML:

 $( "#redundant_text_wrapper").html(function(index, oldHtml) { return oldHtml.replace(redundantText,''); }); 

说了这么多,替换包装器的全部内容效率较低,并且可能会破坏内部元素上的现有事件处理程序。 我想说最好把你的冗余文本放到另一个元素中,比如 ,然后添加和删除它(或者只显示和隐藏它):

 // wrap it all in a  - give it a class to be sure var redundantText = 'text text text Contact Me text text text'; $('#collapse_1').on('show.bs.collapse', function() { $(".dropdown_collapse_1").addClass("dropdown-indicator"); $(".dropdown_collapse_1").removeClass("dropdown-collapsed"); $("#redundant_text_wrapper").append(redundantText); }); $('#collapse_1').on('hide.bs.collapse', function() { $(".dropdown_collapse_1").addClass("dropdown-collapsed"); $(".dropdown_collapse_1").removeClass("dropdown-indicator"); // just find the span and remove it $("#redundant_text_wrapper > span.redundant").remove(); }); 

更改

 $( "#redundant_text_wrapper").text().replace('redundantText',''); 

至:

 $( "#redundant_text_wrapper").text().replace(redundantText,''); 

删除变量周围的引号。 这样它将被视为变量而不是字符串。

要么

 $("#redundant_text_wrapper").text($("#redundant_text_wrapper").text().replace(redundantText,'')); 

这样它首先得到文本而不是替换它并设置它。

好的,我现在尝试了一种不同的方法:

 var redundantText = " text text text Contact Me text text text"; $('#collapse_1').on('show.bs.collapse', function() { $(".dropdown_collapse_1").addClass("dropdown-indicator"); $(".dropdown_collapse_1").removeClass("dropdown-collapsed"); $("#redundant_text_wrapper").after(redundantText); }); $('#collapse_1').on('hide.bs.collapse', function() { $(".dropdown_collapse_1").addClass("dropdown-collapsed"); $(".dropdown_collapse_1").removeClass("dropdown-indicator"); $('#redundantText_wrapper').remove(); }); 

所以基本上我使用’after’而不是’append’并将文本放入带ID的范围中。 现在我可以使用$(’#ID’)。remove(); 在关闭标签时摆脱它。

Interesting Posts